import time
import network
import ntptime

class NTPManager:
    def __init__(self, timezone=0):
        self.timezone = timezone  # 0=UTC，中国时区填8（但阿里云用UTC，所以这里保持0）
        self.sync_success = False

    def sync_ntp(self):
        """同步NTP时间（关键：获取UTC时间，而非本地时间）"""
        max_retries = 3
        retry_count = 0

        while retry_count < max_retries:
            try:
                wlan = network.WLAN(network.STA_IF)
                if not wlan.isconnected():
                    print("NTP同步失败：WiFi未连接")
                    time.sleep(2)
                    retry_count += 1
                    continue

                ntptime.host = "ntp.aliyun.com"
                ntptime.settime()  # 同步时间到系统
                
                # 关键：等待系统时间更新（增加延迟）
                time.sleep(1)  # 等待1秒，确保系统时间已刷新
                
                # 关键：用 gmtime() 获取UTC时间（避免时区偏差）
                utc_time = time.gmtime()  # 替换 time.localtime()
                # 同时获取当前时间戳，验证是否与时间匹配
                utc_timestamp = time.time()
                print(f"同步后UTC时间戳（秒）：{utc_timestamp}")
                print(f"NTP同步成功（UTC时间）：{utc_time[0]}-{utc_time[1]:02d}-{utc_time[2]:02d} {utc_time[3]:02d}:{utc_time[4]:02d}:{utc_time[5]:02d}")
                
                self.sync_success = True
                return True

            except Exception as e:
                print(f"NTP同步失败（第{retry_count+1}次）：{str(e)}")
                time.sleep(3)
                retry_count += 1

        print("NTP同步多次失败，可能导致阿里云连接异常")
        self.sync_success = False
        return False

    def get_utc_timestamp_ms(self):
        """获取当前UTC时间戳（毫秒级，用于阿里云签名）"""
        if not self.sync_success:
            print("警告：未同步NTP时间，时间戳可能无效")
        
        # time.time() 返回UTC时间戳（秒级，浮点数），转换为毫秒级整数
        return int(time.time() * 1000)
